package com.adisi.objetos;

import com.adisi.bd.UsuarioDatos;

import com.adisi.objetos.Usuario;
import com.adisi.objetos.Perfil;

import java.util.ArrayList;
import java.util.List;

public class UsuarioManager {
	

	/**
	 * Obtiene una lista de todas las personas que son Usuarios del sistema
	 * 
	 * @return List<Usuario>
	 */
	public static List<Usuario> conseguirTodosLosUsuarios() {
		UsuarioDatos ud = new UsuarioDatos();
		return ud.conseguirTodosLosUsuarios();
		
	}

	/**
	 * Obtiene una lista de todas las personas que estan asignadas a un perfil
	 * 
	 * @return List<Usuario>
	 */
	public static List<Usuario> conseguirTodosLosUsuarios(Perfil perfil) {
		UsuarioDatos ud = new UsuarioDatos();
		return ud.conseguirTodosLosUsuarios(perfil);
		
	}
	
	
	/**
	 * Obtiene los datos de 1 Usuario del sistema buscando por Id
	 * 
	 * @param int
	 * 
	 * @return Usuario
	 */
	public static Usuario conseguirUnUsuario(int idUsuario) {
		UsuarioDatos ud = new UsuarioDatos();
		return ud.conseguirUnUsuario(idUsuario);
		
	}

	/**
	 * Obtiene los datos de 1 Usuario del sistema buscando por Nombre de Usuario
	 * 
	 * @param String
	 * @param boolean
	 * 
	 * @return Usuario
	 */
	public static Usuario conseguirUnUsuario(String nick) {

		return conseguirUnUsuario(nick, false); 
	}

	
	
	public static Usuario conseguirUnUsuario(String nick, boolean conPerfiles) {
		UsuarioDatos ud = new UsuarioDatos();
		Usuario usuario = ud.conseguirUnUsuario(nick);
		
		if(conPerfiles)
			cargarPerfiles(usuario);
		
		return usuario;
		
		
		
	}

	/**
	 * Graba los datos de 1 Usuario editado
	 * 
	 * @param Usuario
	 * 
	 * @return boolean
	 */
	public static boolean grabarUnUsuario(Usuario usuario) {
		UsuarioDatos ud = new UsuarioDatos();
		return ud.grabarUnUsuario(usuario);
	}

	/**
	 * Borra los datos de 1 Usuario 
	 * 
	 * @param int
	 * 
	 * @return boolean
	 */
	public static boolean borrarUnUsuario(int idUsuario) {
		UsuarioDatos ud = new UsuarioDatos();
		return ud.borrarUnUsuario(idUsuario);
	}
	
	/**
	 * Borra los datos de 1 Usuario 
	 * 
	 * @param Usuario
	 * 
	 * @return boolean
	 */
	public static boolean borrarUnUsuario(Usuario usuario) {
		UsuarioDatos ud = new UsuarioDatos();
		return ud.borrarUnUsuario(usuario.getIdUsuario());
		
	}

	public static boolean agregarUnUsuario(Usuario usuario) {
		UsuarioDatos ud = new UsuarioDatos();
		return ud.agregarUnUsuario(usuario);
		
	}	
	
	/**
	 * Valida si un usuario tiene o no un perfil determinado.
	 * 
	 * @param Usuario
	 * @param int
	 */
	public static boolean poseePerfil(Usuario usuario, int idPerfil){
		boolean tiene = false;
		
		ArrayList<Perfil> perfiles = (ArrayList<Perfil>) usuario.getPerfiles();
		
		if(perfiles!=null){
			int q = perfiles.size();
			
			for(int i = 0; i < q; i++){
				if(perfiles.get(i).getIdPerfil()==idPerfil){
					tiene = true;
					break;
				}
			}
		}
		
		return tiene;
	}
	
	/**
	 * Asigna los perfiles que se le pasan como parametros.
	 * 
	 * @param Usuario
	 * @param List<Perfil>
	 * 
	 * @return boolean
	 */
	public static boolean asignarPerfiles(Usuario usuario, List<Perfil> perfiles){
		
		boolean ok = true;
		UsuarioDatos ud = new UsuarioDatos();
		
		//Primero eliminamos los perfiles ya asignados
		ud.limpiarPerfiles(usuario.getIdUsuario());
		
		//Luego asignamos los nuevos perfiles 1 a 1
		for(int i = 0; i < perfiles.size(); i++){
			if(ud.asignarUnPerfil(usuario, perfiles.get(i))==false) {
				ok = false;
				break;
			}
		};
		
		if(ok)
			usuario.setPerfiles(perfiles);
		
		return ok;
		
	}	
	
	
	/**
	 * Carga en el usuario los perfiles que iene asignados
	 * 
	 * @param Usuario
	 * 
	 * @return boolean
	 */
	public static void cargarPerfiles(Usuario usuario){

		PerfilManager pm = new PerfilManager();
		
		usuario.setPerfiles(pm.conseguirTodosLosPerfiles(usuario));
	}	
	
}
